package orm

import "gorm.io/gen"

// Page 后端返回给前端的分页数据
type Page struct {
	PageNum   int   `json:"page-num"`   //页码
	PageSize  int   `json:"page-size"`  //每页的记录数
	TotalPage int   `json:"total-page"` //总页数
	TotalRows int64 `json:"total-rows"` //总行数
	Rows      any   `json:"rows"`       //当前页的数据
}

func NewPage(pageNum int, pageSize int, totalRows int64, rows any) *Page {
	if pageNum <= 0 {
		pageNum = 1
	}
	if pageSize <= 0 {
		pageSize = 10
	}
	page := &Page{
		PageNum:   pageNum,
		PageSize:  pageSize,
		TotalPage: 0,
		TotalRows: totalRows,
		Rows:      nil,
	}

	tempPage := int(page.TotalRows / int64(pageSize))

	if page.TotalRows%int64(page.PageSize) == 0 {
		page.TotalPage = tempPage
	} else {
		page.TotalPage = tempPage + 1
	}
	return page
}

func Paginate(pageNum int, pageSize int) func(tx gen.Dao) gen.Dao {
	return func(tx gen.Dao) gen.Dao {
		if pageNum <= 0 {
			pageNum = 1
		}
		if pageSize <= 0 {
			pageSize = 10
		}
		offset := (pageNum - 1) * pageSize

		return tx.Offset(offset).Limit(pageSize)
	}
}
